#include <stdio.h>
#define MaxSize 100
typedef int DataType;

typedef struct
{
	DataType list[MaxSize];
	int size;
 } SeqList;
 
 void ListInitiate(SeqList *L)/*初始化顺序表L*/
 {
 	L->size = 0;/*定义初始数据元素个数*/ 
  } 
  int ListLength(SeqList L)/*返回顺序不表L的当前数据元素个数*/
  {
  	return L.size;
   } 
   
   int ListInsert(SeqList *L, int i, DataType x)
   /*在顺序表L的位置i(0 ≤i ≤size )前插入数据元素x*/
   /*插入成功返回1，插入失败返回0*/
   {
   	int j;
   	if(L->size >= MaxSize)
   	{
   		printf("顺序表已满无法插入！ \n");
   		return 0;
	   }
	   else if(i < 0 || i > L->size )
	   {
	   	printf("参数不合法！ \n");
	   	return 0;
	   }
	   else
	   {
	   	//此段程序有错误  ok
		   for(j = L->size; j > i;j--) L->list[j] = L->list[j-1];/*为插入做准备*/
		   L->list[i] = x;/*插入*/
		   L->size ++;/*元素个数+1*/
		   return 1; 
	   }
	} 
	
	int ListDelete(SeqList *L, int i, DataType *x)
	/*删除顺序表中位置i(0 <= i <= size -  1) 的数据元素值并存放到参数x中*/
	/*删除成功返回1，删除失败返回0*/
	{
		int j;
		if(L->size <= 0){
			printf("数据表已空无数据元素可删！ \n");
			return 0;
		}
		else if(i < 0 || i > L->size-1 ){
			printf("参数i不合法");
			return 0;
		}
		else{
			//此段程序有错误  ok
			*x = L->list[i];/*保存删除的元素到参数x中*/
			for(j =i+1; j <= L->size-1; j++) {
			
			L->list[j-1] = L->list[j];
			}/*依次前移*/
			L->size--;/*数据元素个数-1*/
			return 1; 
		}
	 }
	 
	 int ListGet(SeqList L, int i , DataType *x)
	 /*取顺序表L中第i个数据元素的值存于x中，成功则返回1，失败返回0*/
	 {
	 	if(i < 0 || i > L.size-1){
	 		printf("参数i不合法！ \n");
	 		return 0;
		 }
		 else{
		 	*x = L.list[i];
		 	return 1;
		 }
	  } 
	  
	  //有错误：实现函数体，实现在L内查找x。
	  //当x存在于L中是，返回x所在的索引的最小值；
	  //当x不存在于L中时，返回-1.
	  int ListSearch(SeqList L, DataType x){
	  	for(int a = 0; a < L.size; a++){
	  		if(L.list[a] == x){
	  			return a;
			  }
		  }
		  return -1;
	  }
	  int main(int argc, char * argv[]){
	  	SeqList myList;
	  	int i , x;
	  	ListInitiate(&myList);
	  	for(i = 0; i < 10; i++)
	  	ListInsert(&myList, i, i+1);
	  	ListDelete(&myList, 4, &x);
	  	printf("插入10个元素，删除第五个元素后线性表：");
	  	for(i = 0; i < ListLength(myList); i++){
	  		//此段程序有一处错误
			  ListGet(myList, i, &x);
			  printf("%d", x); 
		  }
		  printf("\n数据9的索引值:%d\n数据11的索引值:%d", ListSearch(myList, 9), ListSearch(myList, 11));
    		getchar();
    		return 0;
	  } 